package com.ebupt.migu.music.userGroup.mapper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ebupt.migu.music.common.entity.ResultObject;
import com.ebupt.migu.music.global.dto.RateMonitor;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.ebupt.migu.music.userGroup.entity.AgeDivision;
import com.ebupt.migu.music.userGroup.entity.AreaInfo;
import com.ebupt.migu.music.userGroup.entity.GradeDivision;
import com.ebupt.migu.music.userGroup.entity.UserGroupInfo;
import com.ebupt.migu.music.userGroup.entity.bo.UserGroupBo;
import com.ebupt.migu.music.userGroup.entity.dto.UserGroupDTO;
import com.ebupt.migu.music.userGroup.entity.vo.UserGroupVo;

/**
 * Created by Intellij IDEA.
 * User: liuyangyang@cd.ebupt.com
 * Date: 2019/9/19
 */
@Mapper
@DS("mysql_mg")
public interface CrowdMapper {

    /**
     * 手动更新人群
     *
     * @param params
     */
    void refreshCrowd(Map<String, Object> params);

    /**
     * 更新人群信息
     *
     * @param params
     */
    void updateCrowd(Map<String, Object> params);

    /**
     * 查询当前人群参与哪些人群重组
     * 1. groupId在resGroups中存在
     * 2. createStatus ！= 8 （不是删除状态）
     *
     * @param groupId
     * @return
     */
    List<HashMap<String, Object>> queryResGroups(String groupId);

    /**
     * 查询当前人群参与的运营策略
     * 1. 策略状态不可被标记为： 1-待审核；2-已驳回；3-未开始；4-进行中；
     *
     * @param groupId
     * @return
     */
    List<HashMap<String, Object>> queryPartInStrategy(String groupId);

    /**
     * 创建人群
     *
     * @param params
     */
    void createUserGroup(Map<String, Object> params);


    /**
     * 创建人群iop融合明细
     *
     * @param params
     */
    void createIopInfo(Map params);


    /**
     * 查询咪咕音乐省份列表
     *
     * @return
     */
    List<AreaInfo> queryMiguProvince();

    /**
     * 查询DPI省份列表
     *
     * @return
     */
    List<AreaInfo> queryDPIProvince();

    /**
     * 查询指定省份的城市列表
     *
     * @return
     */
    // List<AreaInfo> queryArea(String provinceCode, int code);
    List<AreaInfo> queryArea(Map<String, Object> params);

    /**
     * 查询年龄段划分列表
     *
     * @return
     */
    List<AgeDivision> queryAgeDivisionList();

    /**
     * 查询等级划分列表
     *
     * @return
     */
    List<GradeDivision> queryGradeDivisionList();

    /**
     * 查询是否存在同名用户群
     *
     * @param userGroupName
     * @return
     */
    HashMap<String, Object> isUserGroupNameExist(String userGroupName);

    /**
     * 查询是否存在同名用户群
     *
     * @return
     */
    int isUserGroupNameExistCnt(Map<String, Object> map);

    /**
     * 查询当前条件下有多少人群
     *
     * @param map
     * @return
     */
    Integer countCrowdList(Map<String, Object> map);

    /**
     * 条件、分页查询人群列表
     *
     * @param map
     * @return
     */
    List<HashMap<String, Object>> queryCrowdList(Map<String, Object> map);

    /**
     * 条件、分页查询人群列表【创建策略专供】
     *
     * @param map
     * @return
     */
    List<HashMap<String, Object>> liteList(Map<String, Object> map);

    /**
     * 根据人群ID查询人群
     *
     * @param groupId
     * @return
     */
    HashMap<String, Object> queryByGroupID(@Param("groupId") String groupId);

    /**
     * 查询静态标签人群列表
     *
     * @param map
     * @return
     */
    List<HashMap<String, Object>> queryStaticLabelGroup(Map<String, Object> map);

    /**
     * 查询动态标签人群列表
     *
     * @param map
     * @return
     */
    List<HashMap<String, Object>> queryDynamicLabelGroup(Map<String, Object> map);

    /**
     * 查询文件上传人群列表
     *
     * @param map
     * @return
     */
    List<HashMap<String, Object>> queryFileGroup(Map<String, Object> map);

    /**
     * 查询重组人群列表
     *
     * @param map
     * @return
     */
    List<HashMap<String, Object>> queryMergeGroup(Map<String, Object> map);

    /**
     * 通过人群名称查询人群ID
     *
     * @param userGroupName
     * @return
     */
    String queryByName(String userGroupName);

    /**
     * 创建hive_delay_update记录
     *
     * @param map
     */
    void createHiveDelayUpdateInfo(Map<String, Object> map);

    /**
     * 更新hive_delay_update记录
     *
     * @param map
     */
    void updateHiveDelayUpdateInfo(Map<String, Object> map);

    List<HashMap<String, Object>> refresh();

    /**
     * 通过人群名称查询人群详情
     *
     * @return
     */
    Map<String, Object> queryGroupDetailByName(String userGroupName);

    /**
     * 查询白金会员类型
     *
     * @return
     */
    List<HashMap<String, String>> vipCode();

    /**
     * 添加FTP人群静态标签筛选条件
     *
     * @param params
     */
    void createUserFtpDetail(Map<String, Object> params);

    void deleteCustomerTmp(Map<String, Object> params);

    /**
     * 查询静态标签明细
     *
     * @param map
     * @return
     */
    String queryStaticCustomerInfo(Map<String, Object> map);

    /**
     * 查询动态标签规则明细
     *
     * @param groupId
     * @return
     */
    HashMap<String, Object> dynamicCustomerInfo(String groupId);

    /**
     * 创建重组记录- master
     * 
     * @param map
     */
    public void addRecombineCustomerMaster(Map<String, Object> map);

    /**
     * 创建重组记录- slave
     * 
     * @param map
     */
    public void addRecombineCustomerSlave(Map<String, Object> map);

    /**
     * 查询重组记录是否存在
     * 
     * @param map
     * @return
     */
    public boolean isRecombineCustomerMasterExist(Map<String, Object> map);

    /**
     * 更新记录
     * 
     * @param map
     */
    public void updateRecombineCustomerMaster(Map<String, Object> map);

    /**
     * 查询重组记录是否存在
     * 
     * @param map
     * @return
     */
    public boolean isRecombineCustomerSlaveExist(Map<String, Object> map);

    /**
     * 更新记录
     * 
     * @param map
     */
    public void updateRecombineCustomerSlave(Map<String, Object> map);

    /**
     * Query user group list.
     *
     * @param params
     *            the params
     * @return the list
     */
    List<Map<String, Object>> queryUserGroup(Map<String, Object> params);

    /**
     * Query by status list.
     *
     * @return the list
     */
    List<UserGroupInfo> queryByStatus();

    /**
     * Batch save customer info.
     *
     * @param list
     *            the list
     */
    void batchSaveCustomerInfo(@Param("u") List<UserGroupInfo> list);

    /**
     * Query user group for insight list.
     *
     * @return the list
     */
    List<UserGroupInfo> queryUserGroupForInsight();

    /**
     * 获取客群类型
     * 
     * @return
     */
    List<UserGroupBo> selectStaticCustomerByAll();

    List<UserGroupVo> queryUserGroupList(@Param("userGroupDTO") UserGroupDTO userGroupDTO);

    List<HashMap<String, Object>> queryLevel1(Map<String, Object> params);

    int queryTotalLevel2(Map<String, Object> params);

    List<HashMap<String, Object>> queryLevel2(Map<String, Object> params);

    int queryTotalLevel3(Map<String, Object> params);

    List<HashMap<String, Object>> queryLevel3(Map<String, Object> params);

    /**
     * 根据创建人，查询上一次的转化率阈值监控配置
     *
     * @param creator
     * @return
     */
    List<HashMap<String, Object>> qrySettingsByCreator(String creator);

    /**
     * 创建或者更新转化率阈值监控配置
     *
     * @param params
     * @return
     */
    void insertSettingsByCreator(HashMap<String, Object> params);

    /**
     * 根据创建人，删除已有的转化率阈值监控配置
     *
     * @param creator
     * @return
     */
    void delSettingsByCreator(String creator);
}
